package com.example.demos.web.controller;


import com.example.demos.dto.EmpAddDTO;
import com.example.demos.dto.EmpDTO;
import com.example.demos.dto.EmpEditDTO;
import com.example.demos.dto.EmpQueryDTO;
import com.example.demos.entity.Dep;
import com.example.demos.entity.Emp;
import com.example.demos.service.DepService;
import com.example.demos.service.EmpService;
import com.example.demos.util.PageBean;
import com.example.demos.util.PageParam;
import com.example.demos.util.Result;
import com.example.demos.util.Validator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.math.BigInteger;
import java.util.List;

@Slf4j
@RestController
@RequestMapping("/v2/emp")
public class EmpController {

    @Autowired
    private EmpService empService;


    @GetMapping("/listByPage")
    public Result<PageBean<List<EmpDTO>>> select(PageParam pageParam, EmpQueryDTO empQueryDTO) {
        PageBean<List<EmpDTO>> select = empService.select(pageParam, empQueryDTO);
        return Result.ok(select);
    }

    @GetMapping("/selectone")
    public Result<EmpEditDTO> selectById(BigInteger id) {
        EmpEditDTO empEditDTO = empService.selectById(id);
        return Result.ok(empEditDTO);
    }


    @GetMapping("/deplist")
    public Result<List<Dep>> selectDepList() {
        List<Dep> list = empService.selectDepList();
        return Result.ok(list);
    }

    @DeleteMapping
    public Result<Void> delete(BigInteger id) {
        return empService.delete(id) > 0
                ? Result.ok("删除员工成功")
                : empService.delete(id) == -1
                ? Result.bizErr("员工还有权限，请删除权限")
                : Result.bizErr("删除员工失败");
    }

    @PostMapping("/add")
    public Result<Void> insert(EmpAddDTO empAddDTO) {
        if (empAddDTO.getUserName() == null
                || "".equals(empAddDTO.getUserName())
                || empAddDTO.getAddress() == null
                || "".equals(empAddDTO.getAddress())
                || empAddDTO.getEmail() == null
                || "".equals(empAddDTO.getEmail())
                || empAddDTO.getGender() == null
                || empAddDTO.getBirthday() == null
                || empAddDTO.getDep() == null
        ) {
            return Result.bizErr("请检查信息是否添全");
        }

        if (!Validator.isValidTele(empAddDTO.getTele())) {
            return Result.bizErr("电话格式不正确");
        }

        if (!Validator.isValidEmail(empAddDTO.getEmail())) {
            return Result.bizErr("邮箱格式不正确");
        }

        int insert = empService.insert(empAddDTO);
        if (insert > 0) {
            return Result.ok("新增员工成功");
        } else if (insert == -1) {
            return Result.bizErr("用户名重复");
        }
        return Result.bizErr("新增员工失败");
    }

    @PostMapping("/update")
    public Result<Void> update(EmpEditDTO empEditDTO) {
        if (empEditDTO.getUserName() == null
                || "".equals(empEditDTO.getUserName())
                || empEditDTO.getAddress() == null
                || "".equals(empEditDTO.getAddress())
                || empEditDTO.getEmail() == null
                || "".equals(empEditDTO.getEmail())
                || empEditDTO.getGender() == null
                || empEditDTO.getBirthday() == null
                || empEditDTO.getDep() == null
        ) {
            return Result.bizErr("请检查信息是否添全");
        }

        if (!Validator.isValidTele(empEditDTO.getTele())) {
            return Result.bizErr("电话格式不正确");
        }

        if (!Validator.isValidEmail(empEditDTO.getEmail())) {
            return Result.bizErr("邮箱格式不正确");
        }

        int update = empService.update(empEditDTO);
        if (update > 0) {
            return Result.ok("修改员工成功");
        } else if (update == -1) {
            return Result.bizErr("用户名重复");
        }
        return Result.bizErr("修改员工失败");
    }


}
